The invention is generally related to computers and computer software, and in particular, to logically-partitioned and virtualized computing environments.
Computing technology has advanced at a remarkable pace, with each subsequent generation of computing system increasing in performance, functionality, and storage capacity, often at reduced cost. In addition, workload allocation of computing and other hardware resources is often employed to maximize the utilization of hardware resources such as processors, memories, networks, storage devices, etc., and thereby reduce the overall costs necessary for supporting a desired workload capacity. Optimizing workload allocation can also have a positive impact on power costs and environmental concerns due to a reduction in the amount of hardware resources required to support a given workload.
Many computer or data processing systems employ virtualization, also referred to as logical partitioning, which enables one or more individual physical computers to each run several operating environments, or operating systems, at once in a virtualized computing environment. In some instances, for example, a single physical computer, which may also be referred to as a host, can run a plurality of operating systems in a corresponding plurality of virtual machines (VMs), also referred to as logical partitions (LPARs). Each operating system resides in its own virtual machine, with each virtual machine allocated a part of a physical processor, an entire physical processor, or multiple physical processors from the computer. Additionally, a portion of the computer's memory may be allocated to each virtual machine. An underlying partition manager, often referred to as a hypervisor or virtual machine monitor (VMM), manages and controls the virtual machines. The hypervisor is typically a part of the system firmware and manages the allocation of resources to the operating systems and virtual machines. As such, one physical computer may run one or more virtual machines and thus virtualize the underlying hardware resources used by the applications, operating systems, and other program code configured to operate in those virtual machines.
Virtualization is increasingly used in data centers and cloud computing applications, which may provide for cost efficiencies through elastic computing, whereby hardware resources from multiple hosts are provisioned and de-provisioned based on workload changes. In such applications, individual workloads may change over time, and as such virtualization may be employed to effectively multiplex hardware resources over multiple workloads to provide an overall greater resource utilization. In order to balance costs, an assumption may be made that not all workloads will run with maximum resource requirements at the same time, so fewer hardware resources than the sum of all maximum resource requirements for workloads may be allocated for a given set of workflows, resulting in the hardware resources being overcommitted. As one example, a cloud provider may allocate more virtual processors (CPUs) across multiple virtual machines on a particular host computer under the assumption that some of the virtual machines will only run at off-peak hours when other virtual machines are shut down or otherwise deactivated.
Some data centers and cloud computing applications may also support the virtualization of other types of hardware resources, such as storage devices and networks, which may enable virtual machines to access virtual networks and/or storage devices, and with the particulars of the underlying hardware supporting such virtual entities managed in a manner that is effectively hidden from the virtual machines. The allocation of such hardware resources to virtual machines may also impact performance and efficiency, as overloading networks and/or storage devices can lead to slow response times, and in some instances, to an inability of a virtual machine to connect to an underlying hardware resource.
Virtualized computing environments may also utilize various technologies that may be used to improve performance and/or reliability. For example, high availability techniques may be employed to handle fault situations, e.g., to automatically restart a virtual machine if the virtual machine is detected to have gone down, to rebuild a virtual machine on a new host if an original host unexpectedly crashes or loses power. In addition, load balancing may be employed to dynamically migrate virtual machines to different hosts, e.g., whenever one host is overloaded and excess capacity is available on another host. Furthermore, energy efficiency is often a concern in many data centers, and as a result, it may be desirable in some instances to consolidate virtual machines on fewer numbers of hosts to enable unused hosts to be powered down.
While these performance and/or reliability-related technologies can prove to be valuable in some situations, in other situations they may be unnecessary, or may even have an adverse impact on system performance. As but one example, the overhead associated with migrating virtual machines to different hosts for failover or load balancing concerns may be unnecessary if the virtual machines do not continue to operate on the new hosts for appreciable amounts of time. Moreover, if virtual machines are constantly being created and destroyed, consolidating virtual machines to reduce power consumption may be counterproductive, as the overhead associated with powering down a host and then restarting the host to accommodate newly-created virtual machines may exceed any savings that may have occurred due to the consolidation.
As such, the aforementioned performance and/or reliability-related technologies are generally only used when intentionally and manually enabled by an administrator. Leaving such decisions to an administrator, however, can lead to sub-optimal system configurations, and moreover, even if an optimal configuration is initially selected, subsequent changes in a system can render a previously-optimal system configuration sub-optimal. In some instances, moreover, it may not be known whether a virtual machine will be long-running or short-running at the time the virtual machine is created and deployed, so an optimal configuration may not be knowable for that virtual machine at the time of deployment.
Accordingly, a continuing need exists in the art for an improved manner of managing virtual machines in a virtualized computing environment.